package com.example.flower_shop.service.impl;

import com.example.flower_shop.dto.admin.AdminOverviewDTO;
import com.example.flower_shop.repository.OrderRepository;
import com.example.flower_shop.repository.ProductRepository;
import com.example.flower_shop.service.AdminService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class AdminServiceImpl implements AdminService {

    private final OrderRepository orderRepository;
    private final ProductRepository productRepository;

    @Override
    public AdminOverviewDTO getOverview() {
        AdminOverviewDTO overview = new AdminOverviewDTO();

        // 获取订单总数
        overview.setOrderCount(orderRepository.count());

        // 获取总收入
        BigDecimal totalIncome = orderRepository.calculateTotalIncome();
        overview.setIncome(totalIncome != null ? totalIncome : BigDecimal.ZERO);

        // 获取商品总数
        overview.setProductCount(productRepository.count());

        return overview;
    }

    @Override
    @Transactional
    public void updateIncome(BigDecimal amount) {
        if (amount == null || amount.compareTo(BigDecimal.ZERO) <= 0) {
            return; // 如果金额为空或小于等于0，则不更新
        }

        // 由于我们在数据库层面没有单独的收入表，
        // 这里不需要额外操作，因为OrderRepository.calculateTotalIncome()方法
        // 已经会在查询时计算所有已支付订单的总金额

        // 日志记录收入更新
        // 注意：如果需要更详细的收入记录，可以考虑添加一个收入记录表
        // 并在这里添加记录

        // 如果将来需要更细粒度的收入统计，如每日收入、每月收入等
        // 可以在此方法中添加相应的逻辑
    }
}